package com.home.admin.config;

import com.home.common.handler.GlobalExceptionHandler;
import com.home.security.browser.interceptor.BrowserInterceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;

/**
 * Description: WebApp 模块拦截器
 * Created by 王大宸 on 2020-09-28 20:36
 * Created with IntelliJ IDEA.
 */
@Configuration
public class WebAppWebMvcConfig implements WebMvcConfigurer {
    private static final Logger logger = LoggerFactory.getLogger(WebAppWebMvcConfig.class);

    /***
     * Description： 添加跨域支持
     *
     * @author 王大宸
     * @date 2020-2-27 15:14
     * @param registry
     * @return void
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**") // 拦截所有权请求
                .allowedMethods("*") // 允许提交请求的方法，*表示全部允许
                .allowedOrigins("*") // #允许向该服务器提交请求的URI，*表示全部允许
                .allowCredentials(true) // 允许cookies跨域
                .allowedHeaders("*") // #允许访问的头信息,*表示全部
                .maxAge(18000L); // 预检请求的缓存时间（秒），即在这个时间段里，对于相同的跨域请求不会再预检了

//        registry.addMapping("/**")
//                .allowedOrigins("*")
//                .allowCredentials(true)
//                .allowedMethods("GET", "POST", "DELETE", "PUT", "PATCH", "OPTIONS")
//                .allowedHeaders("*")
//                .maxAge(3600 * 24);
    }

    /***
     * 功能说明：配置静态访问资源
     *         文件访问地址配置
     *
     * @author 王大宸
     * @date 2020/9/28 20:38
     * @param registry registry
     * @return void
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    /***
     * Description：全局异常处理
     *
     * @author 王大宸
     * @date 2020-2-10 12:55
     * @param
     * @return com.home.common.handler.GlobalExceptionHandler
     */
    @Bean
    public GlobalExceptionHandler getGlobalExceptionHandler() {
        logger.info("正在配置全局异常处理 ...");
        return new GlobalExceptionHandler();
    }

    /***
     * 功能说明：拦截器,所有的统一拦截
     *
     * @author 王大宸
     * @date 2020/7/6 13:41
     * @param registry registry
     * @return void
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(authInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/static/**")
                .excludePathPatterns("/upload/**")
                .excludePathPatterns("/login")
                .excludePathPatterns("/account/token")
                .excludePathPatterns("/forget")
                .excludePathPatterns("/error")
                .excludePathPatterns("/heartbeat");
    }

    /***
     * 功能说明：设置拦截器
     *  这里需要注意,如果这里不写 bean ,在拦截器里面取法直接注入 service
     *
     * @author 王大宸
     * @date 2020/12/4 23:49
     * @param
     * @return com.home.security.interceptor.AuthInterceptor
     */
    @Bean
    public BrowserInterceptor authInterceptor() {
        return new BrowserInterceptor();
    }

}
